2 #ifndef FRAMELIB_FIXEDPOINT_H 3 #define FRAMELIB_FIXEDPOINT_H 32 FL_SP(uint64_t a, uint64_t b, uint64_t c) : mInt(a), mFracHi(b), mFracLo(c) {}
36 uint64_t
intVal()
const {
return mInt; }
73 FL_FP() : mInt(0U), mFrac(0U) {}
74 FL_FP(uint64_t a, uint64_t b) : mInt(a), mFrac(b) {}
76 FL_FP(
const double& val);
80 uint64_t
intVal()
const {
return mInt; }
81 uint64_t
fracVal()
const {
return mFrac; }
85 friend bool operator == (
const FL_FP& a,
const FL_FP& b) {
return (a.mInt == b.mInt & a.mFrac == b.mFrac); }
86 friend bool operator != (
const FL_FP& a,
const FL_FP& b) {
return !(a == b); }
88 friend bool operator < (
const FL_FP& a,
const FL_FP& b) {
return ((a.mInt < b.mInt) | (a.mInt == b.mInt & a.mFrac < b.mFrac)); }
89 friend bool operator > (
const FL_FP& a,
const FL_FP& b) {
return ((a.mInt > b.mInt) | (a.mInt == b.mInt & a.mFrac > b.mFrac)); }
90 friend bool operator <= (
const FL_FP& a,
const FL_FP& b) {
return !(a > b); }
91 friend bool operator >= (
const FL_FP& a,
const FL_FP& b) {
return !(a < b); }
95 friend bool operator ! (
const FL_FP& b) {
return !b.mInt && !b.mFrac; }
134 if (++mFrac == uint64_t(0U))
142 FL_FP result = *
this;
149 if (mFrac-- == uint64_t(0U))
157 FL_FP& result = *
this;
166 operator double()
const {
return ((
double) mInt) + ((double) mFrac / 18446744073709551616.0); }
176 friend bool operator == (
const FL_FP& a,
const double& b) {
return a ==
FL_FP(b); }
177 friend bool operator == (
const double& a,
const FL_FP& b) {
return FL_FP(a) == b; }
178 friend bool operator != (
const FL_FP& a,
const double& b) {
return a !=
FL_FP(b); }
179 friend bool operator != (
const double& a,
const FL_FP& b) {
return FL_FP(a) != b; }
181 friend bool operator < (
const FL_FP& a,
const double& b) {
return a <
FL_FP(b); }
182 friend bool operator < (
const double& a,
const FL_FP& b) {
return FL_FP(a) < b; }
183 friend bool operator > (
const FL_FP& a,
const double& b) {
return a >
FL_FP(b); }
184 friend bool operator > (
const double& a,
const FL_FP& b) {
return FL_FP(a) > b; }
185 friend bool operator <= (
const FL_FP& a,
const double& b) {
return a <=
FL_FP(b); }
186 friend bool operator <= (
const double& a,
const FL_FP& b) {
return FL_FP(a) <= b; }
187 friend bool operator >= (
const FL_FP& a,
const double& b) {
return a >=
FL_FP(b); }
188 friend bool operator >= (
const double& a,
const FL_FP& b) {
return FL_FP(a) >= b; }
203 FL_FP& operator += (
const double& b) {
return operator +=(
FL_FP(b)); }
204 FL_FP& operator -= (
const double& b) {
return operator -=(
FL_FP(b)); }
205 FL_FP& operator *= (
const double& b) {
return operator *=(
FL_FP(b)); }
206 FL_FP& operator /= (
const double& b) {
return operator /=(
FL_FP(b)); }
uint64_t fracLoVal() const
Definition: FrameLib_FixedPoint.h:38
uint64_t fracHiVal() const
Definition: FrameLib_FixedPoint.h:37
FL_SP(uint64_t a, uint64_t b, uint64_t c)
Definition: FrameLib_FixedPoint.h:32
friend FL_SP operator*(const FL_SP &a, const FL_SP &b)
Definition: FrameLib_FixedPoint.cpp:126
FL_FP operator/(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:384
uint64_t fracVal() const
Definition: FrameLib_FixedPoint.h:81
high-precision unsigned fixed-point numerical format.
Definition: FrameLib_FixedPoint.h:66
FL_FP operator-(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:304
friend FL_SP twoMinus(const FL_SP &b)
Definition: FrameLib_FixedPoint.cpp:251
uint64_t intVal() const
Definition: FrameLib_FixedPoint.h:80
a minimal class for "super precision" fixed-point calculations where required.
Definition: FrameLib_FixedPoint.h:27
FL_SP()
Definition: FrameLib_FixedPoint.h:31
friend FL_SP qMul(const FL_SP &a, const uint64_t &intVal, const uint64_t &fracVal)
Definition: FrameLib_FixedPoint.cpp:31
uint64_t intVal() const
Definition: FrameLib_FixedPoint.h:36
FL_FP(uint64_t a, uint64_t b)
Definition: FrameLib_FixedPoint.h:74
FL_FP operator+(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:295
FL_FP()
Definition: FrameLib_FixedPoint.h:73